Выделяем обучающую и тестовую выборки. Проверку качества модели в процессе подбора её параметров будем делать с использованием метода перекрестной проверки (cross validation) на обучающей выборке. Тестовая выборка будет использована только для оценки качества результирующей модели. Если использовать всю обучающую выборку для выбора модели, то уходит очень много времени на рассчеты. Поэтому выбор модели будем делать на 20% от всех обучающих данных. Если при оценке какой-то модели окажется, что ее можно улучшить, увеличив размер обучающей выборки, то у нас будет такая возможность!

Размеры выборок:

Выбор используемых параметров

Для обучения модели мы можем использовать не все доступные параметры, в частности мы исключаем низкоинформативные параметры.

Исключаем следующие параметры с низкой информативностью:

##     freqRatio percentUnique zeroVar  nzv
## x1   58.15054    0.10661928   FALSE TRUE
## x2   34.41270    0.02665482   FALSE TRUE
## x3   88.30400    0.02665482   FALSE TRUE
## x5   52.16908    0.06219458   FALSE TRUE
## x6  129.87209    0.01776988   FALSE TRUE
## x7   39.05338    0.01776988   FALSE TRUE
## x22  20.07170    0.07107952   FALSE TRUE

При построении модели каждая категориальная переменная разворачиваются в набор бинарных переменных (со занчениями 0 ли 1), число которых равно количеству категорий у категориальной переменной. Посмотрим на количество уникальных значений (категорий) для наших категориальных переменных:

##   x0   x1   x2   x3   x4   x5   x9  x10  x11  x12  x14  x15  x16  x17  x18 
##   85   12    3    3    6    7    8 1263    5    8   33    3   10   73 1890 
##  x19  x20  x21  x22 
##   11   77 2471    8

Исключаем из рассмотрения следующие Категорийные параметры, у которых количество категорий >11: x0, x1, x10, x14, x17, x18, x20, x21.

Для первоначальной отладки будем использовать еще более сокращенный вариант, в котором отсечены параметры с числом категорий >3: **x0, x1, x4, x5, x9, x10, x11, x12, x14, x16, x17, x18, x19, x20, x21, x22

Boosted Generalized Linear Model (glmboost)

Это продвинутый (boosted) вариант логистической регресии, один из самых базовых методов классификации, поэтому начнем с него. Модель строим на основе всех параметров абонента, поскольку это, во-первых, дает немного лучшие результаты, а во-вторых, что самое важное, позволит нам получить альтернативный набор наиболее значимых параметров абонента для построения других моделей.

?Проведем анализ сдвига/разброса модели на основе Bossted GLM с параметрами:

  • mstop = ****,
  • prune = ****.

?Из графика видим, что модель не страдает от переобучения и показанная ею точность в районе 75-80% является ее “нормальной” точностью (сдвигом) для заданных условий. Уменьшить сдвиг этой модели можно за счет:

  • применения метода boosting (уже),
  • добавления параметров пользователя.

?Хотя логистическая регрессия в сложных задачах может давать не самую высокую точность предсказания, она неплохо работает в нашем случае, а также она позволяет неплохо выбрать наиболее значимые параметры пользователя для задачи классификации ВИП/не-ВИП. При обучении других более сложных моделей помимо отобранных ранее с помощью генетического алгоритма набора параметров будем также пробовать альтернативый набор, состоящий из 30-ти параметров, которые оказались наиболее информативными при построении логистической регрессии.

Не удалось построить эту модель из-за ошибки.

Penalized Logistic Regression (plr)

Нам не удалось выявить наиболее важные параметры путем применения glmboost, попробуем сделать это методом plr, который также является разновиностью логистической регрессии.

Ничего путного этот метод не дал.

Дерево решений (Decision Tree, rpart)

Потерпели неудачу с Boosted GLM. попробуем построить простую модель - дерево решений.

Применяем метод Cost-Sensitive Classification And Regression Tree (CART), чтобы иметь возможность противостоять потенциально высокому разбросу (переобучению) модели за счет параметра Cost.

## n= 11255 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##   1) root 11255 7705 2 (0.0073 0.039 0.32 0.29 0.2 0.11 0.036)  
##     2) x8>=0.9670249 3181  623 2 (0.0047 0.054 0.8 0.047 0.047 0.034 0.0094)  
##       4) x8>=0.9714216 183   69 1 (0 0.62 0.25 0.033 0.066 0.016 0.016) *
##       5) x8< 0.9714216 2998  485 2 (0.005 0.02 0.84 0.048 0.045 0.035 0.009) *
##     3) x8< 0.9670249 8074 4921 3 (0.0083 0.033 0.12 0.39 0.26 0.14 0.046)  
##       6) x8>=0.9621397 3703 1009 3 (0.0086 0.018 0.13 0.73 0.057 0.039 0.02)  
##        12) x8>=0.9665364 556  306 2 (0.0036 0.009 0.45 0.37 0.083 0.061 0.023)  
##          24) x56>=0.5512769 139   42 2 (0 0 0.7 0.22 0.043 0.036 0) *
##          25) x56< 0.5512769 417  242 3 (0.0048 0.012 0.37 0.42 0.096 0.07 0.031) *
##        13) x8< 0.9665364 3147  659 3 (0.0095 0.019 0.073 0.79 0.052 0.035 0.02) *
##       7) x8< 0.9621397 4371 2477 4 (0.008 0.047 0.12 0.11 0.43 0.22 0.068)  
##        14) x8>=0.956766 2427  745 4 (0.0087 0.059 0.091 0.084 0.69 0.05 0.014) *
##        15) x8< 0.956766 1944 1097 5 (0.0072 0.032 0.15 0.13 0.11 0.44 0.14)  
##          30) x8< 0.9523693 914  688 6 (0.0055 0.043 0.19 0.21 0.18 0.12 0.25)  
##            60) x8< 0.9428432 628  460 3 (0.008 0.048 0.24 0.27 0.23 0.16 0.048)  
##             120) x30>=0.003132408 195  107 2 (0.0051 0.13 0.45 0.28 0.11 0.021 0) *
##             121) x30< 0.003132408 433  311 4 (0.0092 0.012 0.14 0.26 0.28 0.22 0.069)  
##               242) x57>=0.3097179 136   71 3 (0.0074 0.0074 0.12 0.48 0.18 0.13 0.074) *
##               243) x57< 0.3097179 297  199 4 (0.01 0.013 0.15 0.16 0.33 0.27 0.067) *
##            61) x8>=0.9428432 286   90 6 (0 0.031 0.094 0.08 0.07 0.038 0.69) *
##          31) x8>=0.9523693 1030  295 5 (0.0087 0.022 0.11 0.062 0.047 0.71 0.037) *
## rpart variable importance
## 
##   only 20 most important variables shown (out of 89)
## 
##                     Overall
## x8                 100.0000
## x57                 20.8050
## x58                 17.6341
## x30                 16.1235
## x56                 11.6838
## x59                  5.1713
## x29                  3.3485
## x1191bb549494        3.3229
## x12e33c63cf35        2.9422
## x9f67f142e40         0.9576
## x48aa82606c6         0.4334
## x23                  0.1781
## x35                  0.1623
## x32                  0.1589
## x11669ea3d319        0.1459
## x44                  0.0000
## `x19Не определено`   0.0000
## x33                  0.0000
## x19dd9c9e0da2        0.0000
## x40                  0.0000

Получаем неплохую точность определения возрастной группы пользователей ~73%. Смущает факт. что в модели используется всего несколько переменных для определения возрастной группы. Возможно, это ее слабое место, ограничивающее максимальную достижимую точность.

Проведем анализ сдвига/разброса на основе Дерева решений c параметрами:

  • cp = 0.0027255.

Этот график показывает средний уровень разброса модели, поскольку графики начинают сходиться. Графики еще не сошлись, что означает, что увеличение размера обучающей выборки может повысить точность модели. Предельной точностью данной модели будет ~74%, которую мы видим на графике для тестовой выборки при максимальных значениях её размера.

Случайный лес (Random Forest, rf)

Дерево решений дало неплохой результат в качестве отправной точки. Попробуем усилить ее за счет применения модели Случайный лес.

##    user  system elapsed 
##  56.033   0.203 624.776
## Random Forest 
## 
## 37502 samples
##    48 predictors
##     7 classes: '0', '1', '2', '3', '4', '5', '6' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 33749, 33752, 33752, 33750, 33753, 33753, ... 
## 
## Resampling results across tuning parameters:
## 
##   mtry  Accuracy   Kappa      Accuracy SD  Kappa SD   
##   15    0.7370800  0.6464789  0.006564933  0.008721471
##   17    0.7386799  0.6490997  0.005196765  0.006958400
##   19    0.7411861  0.6527022  0.006523305  0.008784235
##   21    0.7442792  0.6571018  0.006835157  0.009260575
##   23    0.7443863  0.6575150  0.004790130  0.006473357
##   39    0.7463856  0.6608335  0.006609824  0.009005138
##   41    0.7488391  0.6641071  0.006393101  0.008679348
##   43    0.7476654  0.6625545  0.006364548  0.008693347
##   81    0.7464123  0.6610381  0.006854986  0.009387988
## 
## Accuracy was used to select the optimal model using  the largest value.
## The final value used for the model was mtry = 41.

Случайный лес показывает несколько меньшую точность по сравнению с деревом решений, поскольку он содержит усредненную оценку от 100 деревьев. Зато менее вероятно, что эта модель переообучена, т.е. мы ожидаем, что она с большей вероятностью будет показывать такую же точность на новых данных по сравнению с деревом решений.

Проведем анализ сдвига/разброса на основе Случайного леса c параметром mtry =41.

При nTree=50 график показывает, что обучающая ошибка постоянно равна 0, а тестовая ~ 25%. Это означает, что модель переобучена (имеет высокий разброс) и сдвинута (имеет высокий сдвиг). При nTree = 100 график показывает то же самое.

Чтобы побороть проблему переобучения, можно применть следующее:

  • регуляризация (см. далее),
  • уменьшить количество деревьев,
  • попробовать на полной обучающей выборке,
  • метод bagging,
  • больше данных,
  • сокращение (отбор) параметров.

Поскольку данная модель показывает адекватные результаты, выделим параметры абонента, которые для нее оказались важными. Будем использовать этот набор параметров в случаях, когда другие модели будут показывать высокий разброс.

##    variable    Overall   class
## 1        x8 100.000000 numeric
## 2       x56   9.072750 numeric
## 3       x57   8.900316 numeric
## 4       x30   7.747950 numeric
## 5       x58   6.891428 numeric
## 6       x23   5.800578 numeric
## 7       x29   5.242962 numeric
## 8       x59   4.286280 numeric
## 9       x37   3.929135 numeric
## 10      x54   3.634879 numeric
## 11      x61   3.578602 numeric
## 12      x24   3.533837 numeric
## 13      x27   3.469796 numeric
## 14      x53   3.352441 numeric
## 15      x41   3.331346 numeric
## 16      x13   3.309874 numeric
## 17      x40   3.286897 numeric
## 18      x43   3.150159 numeric
## 19      x55   3.104698 numeric
## 20      x26   2.958803 numeric
## 21      x28   2.922464 numeric
## 22      x25   2.874142 numeric
## 23      x60   2.752286 numeric
## 24      x32   2.729853 numeric
## 25      x42   2.722994 numeric
## 26      x33   2.661877 numeric
## 27      x36   2.412021 numeric
## 28      x44   2.251774 numeric
## 29      x45   2.134243 numeric
## 30      x31   2.133036 numeric
## 31      x48   2.005282 numeric
## 32      x50   1.961128 numeric
## 33      x49   1.961083 numeric
## 34      x46   1.956050 numeric
## 35      x52   1.876651 numeric
## 36      x47   1.847592 numeric
## 37      x39   1.847104 numeric
## 38      x51   1.844711 numeric
## 39      x38   1.612083 numeric
## 40      x35   1.429566 numeric

Видим, что самыми значимыми (значимость >1%) оказались только числовые параметры. Посмотрим на их значения.

##        x8              x56               x57               x30           
##  Min.   :0.0000   Min.   :0.00000   Min.   :0.00000   Min.   :0.0000000  
##  1st Qu.:0.9590   1st Qu.:0.04545   1st Qu.:0.04348   1st Qu.:0.0000000  
##  Median :0.9638   Median :0.19318   Median :0.18182   Median :0.0000155  
##  Mean   :0.9614   Mean   :0.29062   Mean   :0.27667   Mean   :0.0086774  
##  3rd Qu.:0.9673   3rd Qu.:0.47426   3rd Qu.:0.44444   3rd Qu.:0.0060793  
##  Max.   :1.0000   Max.   :1.00000   Max.   :1.00000   Max.   :1.0000000  
##                                                                          
##       x58               x23                x29           
##  Min.   :0.00000   Min.   :0.007289   Min.   :0.0000000  
##  1st Qu.:0.01220   1st Qu.:0.132236   1st Qu.:0.0002009  
##  Median :0.08621   Median :0.178339   Median :0.0011873  
##  Mean   :0.19270   Mean   :0.173109   Mean   :0.0045174  
##  3rd Qu.:0.27586   3rd Qu.:0.214542   3rd Qu.:0.0041283  
##  Max.   :1.00000   Max.   :1.000000   Max.   :1.0000000  
##                                                          
##       x59               x37               x54              x61          
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.0000   Min.   :0.000000  
##  1st Qu.:0.00000   1st Qu.:0.01044   1st Qu.:0.2813   1st Qu.:0.007325  
##  Median :0.02273   Median :0.01914   Median :0.4476   Median :0.019044  
##  Mean   :0.10867   Mean   :0.02835   Mean   :0.4495   Mean   :0.028466  
##  3rd Qu.:0.11184   3rd Qu.:0.03422   3rd Qu.:0.6427   3rd Qu.:0.037539  
##  Max.   :1.00000   Max.   :0.80452   Max.   :1.0000   Max.   :1.000000  
##                                                                         
##       x24               x27               x53              x41        
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.01992   1st Qu.:0.01030   1st Qu.:0.1838   1st Qu.:0.2001  
##  Median :0.02958   Median :0.01661   Median :0.2995   Median :0.3236  
##  Mean   :0.03578   Mean   :0.02654   Mean   :0.3142   Mean   :0.3317  
##  3rd Qu.:0.04311   3rd Qu.:0.03055   3rd Qu.:0.4342   3rd Qu.:0.4467  
##  Max.   :1.00000   Max.   :1.00000   Max.   :1.0000   Max.   :1.0000  
##                                                                       
##       x13                 x40               x43               x55         
##  Min.   :0.0000000   Min.   :0.00000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.0004711   1st Qu.:0.01802   1st Qu.:0.01407   1st Qu.:0.00000  
##  Median :0.0024663   Median :0.02613   Median :0.03140   Median :0.00000  
##  Mean   :0.0054629   Mean   :0.03029   Mean   :0.04053   Mean   :0.04312  
##  3rd Qu.:0.0064697   3rd Qu.:0.03694   3rd Qu.:0.05525   3rd Qu.:0.01382  
##  Max.   :1.0000000   Max.   :1.00000   Max.   :1.00000   Max.   :1.00000  
##                                                                           
##       x26               x28               x25                x60         
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.000000   Min.   :0.00000  
##  1st Qu.:0.02507   1st Qu.:0.01069   1st Qu.:0.007458   1st Qu.:0.00000  
##  Median :0.04735   Median :0.01908   Median :0.015225   Median :0.00000  
##  Mean   :0.06059   Mean   :0.02677   Mean   :0.020619   Mean   :0.04771  
##  3rd Qu.:0.08078   3rd Qu.:0.03359   3rd Qu.:0.026478   3rd Qu.:0.02006  
##  Max.   :0.88858   Max.   :1.00000   Max.   :1.000000   Max.   :1.00000  
##                                                                          
##       x32               x42              x33               x36         
##  Min.   :0.00000   Min.   :0.0000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.2000   1st Qu.:0.07895   1st Qu.:0.02667  
##  Median :0.00000   Median :0.3231   Median :0.15789   Median :0.04000  
##  Mean   :0.06257   Mean   :0.3324   Mean   :0.16753   Mean   :0.04719  
##  3rd Qu.:0.08333   3rd Qu.:0.4462   3rd Qu.:0.23684   3rd Qu.:0.06667  
##  Max.   :1.00000   Max.   :1.0000   Max.   :1.00000   Max.   :1.00000  
##                                                                        
##       x44               x45             x31              x48        
##  Min.   :0.00000   Min.   :0.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.01099   1st Qu.:0.308   1st Qu.:0.1013   1st Qu.:0.0040  
##  Median :0.02747   Median :0.538   Median :0.1179   Median :0.4680  
##  Mean   :0.03579   Mean   :0.540   Mean   :0.1266   Mean   :0.4696  
##  3rd Qu.:0.04945   3rd Qu.:0.810   3rd Qu.:0.1376   3rd Qu.:0.8100  
##  Max.   :1.00000   Max.   :1.000   Max.   :1.0000   Max.   :1.0000  
##                                                                     
##       x50             x49              x46              x52        
##  Min.   :0.000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.000   1st Qu.:0.0000   1st Qu.:0.2500   1st Qu.:0.0000  
##  Median :0.461   Median :0.4540   Median :0.5000   Median :0.4570  
##  Mean   :0.462   Mean   :0.4617   Mean   :0.5216   Mean   :0.4642  
##  3rd Qu.:0.809   3rd Qu.:0.7950   3rd Qu.:0.8000   3rd Qu.:0.8420  
##  Max.   :1.000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##                                                                    
##       x47              x39               x51              x38          
##  Min.   :0.0000   Min.   :0.00000   Min.   :0.0000   Min.   :0.000000  
##  1st Qu.:0.2000   1st Qu.:0.02000   1st Qu.:0.0000   1st Qu.:0.000000  
##  Median :0.5000   Median :0.04000   Median :0.4570   Median :0.000000  
##  Mean   :0.5058   Mean   :0.04912   Mean   :0.4605   Mean   :0.002060  
##  3rd Qu.:0.8000   3rd Qu.:0.06000   3rd Qu.:0.8090   3rd Qu.:0.002747  
##  Max.   :1.0000   Max.   :1.00000   Max.   :1.0000   Max.   :1.000000  
##                                                                        
##       x35        y        
##  Min.   :0.000   0:  271  
##  1st Qu.:0.000   1: 1473  
##  Median :0.000   2:11831  
##  Mean   :0.268   3:11008  
##  3rd Qu.:0.500   4: 7509  
##  Max.   :1.000   5: 4065  
##                  6: 1345

Случайный лес c регуляризацией (RRF)

Обычный случайный лес показал высокий разброс при хорошей точности тренировочной модели, т.е. переобученность. Попробуем побороться с ней за счет регуляризации.

##     user   system  elapsed 
##  132.808    0.644 1476.045
## Regularized Random Forest 
## 
## 37502 samples
##    40 predictors
##     7 classes: '0', '1', '2', '3', '4', '5', '6' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 33749, 33752, 33752, 33750, 33753, 33753, ... 
## 
## Resampling results across tuning parameters:
## 
##   mtry  Accuracy   Kappa      Accuracy SD  Kappa SD   
##    9    0.7457458  0.6601785  0.006358585  0.008646919
##   11    0.7454788  0.6597919  0.008216918  0.011146905
##   13    0.7446790  0.6587276  0.007363222  0.009988057
##   15    0.7445726  0.6585584  0.007510025  0.010134005
##   17    0.7452659  0.6595059  0.006588815  0.008969481
##   19    0.7444123  0.6583701  0.007601830  0.010356118
##   21    0.7449459  0.6590770  0.008251235  0.011148757
##   41    0.7455589  0.6598589  0.007466106  0.010179139
## 
## Tuning parameter 'coefReg' was held constant at a value of 0.8
## 
## Tuning parameter 'coefImp' was held constant at a value of 0
## Accuracy was used to select the optimal model using  the largest value.
## The final values used for the model were mtry = 9, coefReg = 0.8
##  and coefImp = 0.

## [1] 0.7457458

Проведем анализ сдвига/разброса на основе Случайного леса c параметром mtry =41.

Эффекта никакого нет по сравнению с обычным случайным лесом.

Попробуем сделать двухпроходный алгоритм Guided RRF

##    user  system elapsed 
## 165.227   1.435 166.680
## 
## Call:
##  RRF(formula = y ~ ., data = dfTrainFull[importantFeatures3],      ntree = 500, flagReg = 0) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 6
## 
##         OOB estimate of  error rate: 26.94%
## Confusion matrix:
##   0   1    2    3    4    5   6 class.error
## 0 0   2   54  146   52   13   4   1.0000000
## 1 0 249  539  340  292   47   6   0.8309572
## 2 0  42 9683 1283  579  234  10   0.1815569
## 3 0  11  897 9215  628  229  28   0.1628815
## 4 0  20  688  924 5533  320  24   0.2631509
## 5 0   6  507  533  583 2393  43   0.4113161
## 6 0   6  105  295  223  389 327   0.7568773
##    user  system elapsed 
## 195.097   0.879 195.989
## 
## Call:
##  RRF(formula = y ~ ., data = dfTrainFull[importantFeatures3],      ntree = 500, flagReg = 1, coefReg = coefReg) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 6
## 
##         OOB estimate of  error rate: 27.36%
## Confusion matrix:
##    0   1    2    3    4    5   6 class.error
## 0  3   3   53  130   51   24   7   0.9889299
## 1  1 289  309  315  416  111  32   0.8038018
## 2  1 104 9352 1119  747  421  87   0.2095343
## 3 11  29  984 8971  659  243 111   0.1850472
## 4  3  36  728  852 5473  343  74   0.2711413
## 5  2  15  541  454  443 2510 100   0.3825338
## 6  1  13  148  262  160  118 643   0.5219331

Данный подход также не дает прироста в точности классификации.

LogitBoost Classification Algorithm (Boosted Logistic Regression)

Попробуем еще один вариант логистической регрессии. А логистическая ли это регрессия?

Logitboost algorithm relies on a voting scheme to make classifications. Many (nIter of them) week classifiers are applied to each sample and their findings are used as votes to make the final classification. The class with the most votes “wins”. However, with this scheme it is common for two cases have a tie (the same number of votes), especially if number of iterations is even. In that case NA is returned, instead of a label. Train logitboost classification algorithm using decision stumps (one node decision trees) as weak learners.

##    user  system elapsed 
##  31.259   0.288 212.283
## Boosted Logistic Regression 
## 
## 37502 samples
##    48 predictors
##     7 classes: '0', '1', '2', '3', '4', '5', '6' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 33752, 33752, 33753, 33751, 33751, 33752, ... 
## 
## Resampling results across tuning parameters:
## 
##   nIter  Accuracy   Kappa      Accuracy SD  Kappa SD   
##   20     0.7709157  0.6897355  0.007476782  0.010106714
##   21     0.7782718  0.6999806  0.006615587  0.008962107
##   22     0.7682521  0.6855023  0.006787088  0.009004894
##   30     0.7707532  0.6894436  0.006447203  0.008552164
##   59     0.7739537  0.6930150  0.005857256  0.008677606
##   60     0.7710666  0.6898467  0.005562986  0.007715670
##   61     0.7748095  0.6949653  0.005636459  0.007852379
##   80     0.7713553  0.6907467  0.003564486  0.005188747
## 
## Accuracy was used to select the optimal model using  the largest value.
## The final value used for the model was nIter = 21.

## ROC curve variable importance
## 
##   variables are sorted by maximum importance across the classes
##   only 20 most important variables shown (out of 48)
## 
##        X0    X1     X2    X3    X4    X5     X6
## x8  75.13 75.81 100.00 83.89 91.51 97.16 100.00
## x30 74.30 94.06  80.87 61.21 75.03 87.37  94.06
## x29 61.90 85.33  80.71 69.55 50.85 68.83  85.33
## x56 75.47 58.02  75.47 62.45 63.22 59.28  73.42
## x59 60.00 69.87  54.17 52.94 48.33 69.87  40.20
## x11 64.88 69.24  61.52 50.55 34.26 60.59  69.24
## x55 57.85 67.04  55.03 57.70 56.77 65.98  67.04
## x31 44.33 66.10  58.72 47.48 36.10 51.75  66.10
## x57 48.18 63.05  64.96 64.96 57.34 58.76  51.19
## x58 45.10 39.47  63.75 61.03 63.75 49.75  53.32
## x23 44.29 62.39  35.96 56.28 62.39 60.48  55.71
## x35 30.07 59.73  54.31 26.16 37.97 48.67  59.73
## x43 32.32 58.97  56.98 49.41 39.05 41.10  58.97
## x12 58.24 58.83  52.92 45.94 34.71 45.59  58.83
## x34 27.18 57.09  52.50 22.14 33.15 44.75  57.09
## x40 35.75 51.81  56.29 50.27 42.95 32.88  56.29
## x44 28.21 54.90  53.10 44.81 35.45 38.12  54.90
## x60 46.17 52.61  54.35 41.56 39.49 33.46  54.35
## x32 44.51 51.48  39.95 24.85 35.00 44.60  51.48
## x26 37.48 49.61  46.88 38.71 37.55 29.96  49.61

Проведем анализ сдвига/разброса на основе LogitBoost c параметром nIter =21.

Модель показывает низкий уровень разброса и является хорошим кандидатом для финальной модели.

Результаты кажутся очень впечатляющими, однако, следует принять во внимание следующую особенность модели LogitBoost. При одинаковом количестве голосов за два класса модель в качестве прогноза выдает NA, которые не учитыватся при рассчете точности. Получается, что наиболее точная модель - та, которая выдает наибольшее количество NA. Попробуем другую модель с голосами, которая свободна от таких проблем.

Продвинутое (boosted) Дерево решений (C5.0)

Предыдущий метод использовал набор одноуровневых деревьев для коллективного голосования, сейчас мы будем использовать сборку из многоуровневых деревьев.

##    user  system elapsed 
## 240.376   0.040 530.703
## 
## Call:
## C5.0.default(x = structure(c(0.96238397655105,
##  0.239203061410435, 0.209803802466136,
##  0.107999757030918, 0.103565571281055, 0.200813946425317, 0.164064872744
## 
## Rule-Based Model
## Number of samples: 11255 
## Number of predictors: 40 
## 
## Number of boosting iterations: 100 
## Average number of rules: 294.5 
## 
## Non-standard options: attempt to group attributes

## [1] 0.7417155

Проведем анализ сдвига/разброса для Продвинутого дерева решений (C5.0):

  • model = rules,
  • winnow = FALSE,
  • trials = 100.

Модель переобучена.

Bagged CART

Поскольку Случайный лес переобучен, применим к нему технику bagging. Модель treebag не имеет параметров настройки.

##    user  system elapsed 
## 112.247   0.325 255.335
## Bagged CART 
## 
## 37502 samples
##    40 predictors
##     7 classes: '0', '1', '2', '3', '4', '5', '6' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 33753, 33753, 33753, 33751, 33753, 33751, ... 
## 
## Resampling results
## 
##   Accuracy   Kappa      Accuracy SD  Kappa SD   
##   0.7409199  0.6539494  0.007203271  0.009536604
## 
## 
## [1] 0.7409199

Bagged AdaBoost (AdaBag)

Попробуем еще один вариант баггинга.

Не получилось запустить эту модели из-за ошибки.

Stochastic Gradient Boosting, ~AdaBoost (gbm)

An implementation of extensions to Freund and Schapire’s AdaBoost algorithm and Friedman’s gradient boosting machine. Includes regression methods for least squares, absolute loss, t-distribution loss, quantile regression, logistic, multinomial logistic, Poisson, Cox proportional hazards partial likelihood, AdaBoost exponential loss, Huberized hinge loss, and Learning to Rank measures (LambdaMart). http://en.wikipedia.org/wiki/Gradient_boosting

Параметры модели:

  • n.minobsinnode - minimum total weight needed in each node.It is used in the tree building process by ignoring any splits that lead to nodes containing fewer than this number of training set instances.
  • n.trees - количество деревьев, которые будут построены.
  • interaction.depth - the maximum depth of variable interactions. 1 implies an additive model, 2 implies a model with up to 2-way interactions, etc.

Ничего интересного в результатах. Далее не рассматриваем.

?Проведем анализ сдвига/разброса на основе Stochastic Gradient Boosting c параметрами: - n.trees = r modGBM\(bestTune\)n.trees, - interaction.depth = r modGBM\(bestTune\)interaction.depth, - shrinkage = r modGBM\(bestTune\)shrinkage.

Метод опорных векторов (Support Vector Machine)

Известно, что для задач классификации лучше подходит ядро на снове радиальной базисной функции или полиномиальное ядро, нежели чем линейное ядро. Тесты показывют, что лучще всего работает полиномиальное ядро, затем идут RBF и линейное ядра. Используем полиномиальное ядро. Эксперименты показали, что SVM Надо обучать сразу на большом объеме данных (или близком к нему). Это требует слишком много ресурсов. Отказываемся от SVM.

Значимыми являеются не все параметры, некоторые из них категорийные.

Проведем анализ сдвига/разброса модели SVM для полной обучающей выборки cо следующими параметрами:

  • degree =
  • scale =
  • С =

?Из графика видим низкий уровень разброса модели, что хорошо, однако, уровень сдвига модели довольно высок и нестабилен, что плохо.

Multi Layer Perceptron (RSNNS)

##    user  system elapsed 
##  68.810   0.403 299.863
## Multi-Layer Perceptron 
## 
## 11255 samples
##    40 predictors
##     7 classes: '0', '1', '2', '3', '4', '5', '6' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 10130, 10130, 10131, 10129, 10130, 10129, ... 
## 
## Resampling results across tuning parameters:
## 
##   size  Accuracy   Kappa      Accuracy SD  Kappa SD  
##   6     0.5520248  0.3967383  0.01003302   0.01561428
##   7     0.5509509  0.3937554  0.01707918   0.02143890
##   8     0.5518429  0.3955980  0.01174586   0.01888790
## 
## Accuracy was used to select the optimal model using  the largest value.
## The final value used for the model was size = 6.

## ROC curve variable importance
## 
##   variables are sorted by maximum importance across the classes
##   only 20 most important variables shown (out of 40)
## 
##        X0    X1     X2    X3    X4    X5     X6
## x8  76.62 75.87 100.00 85.12 93.04 99.59 100.00
## x30 75.44 96.30  81.65 61.19 75.58 87.68  96.30
## x29 71.09 84.33  81.42 70.77 53.05 68.32  84.33
## x56 73.42 55.27  76.01 61.21 60.99 58.05  76.01
## x31 44.50 71.42  61.37 50.81 39.41 55.61  71.42
## x57 52.50 70.16  65.88 70.16 62.06 61.05  54.93
## x59 57.83 67.71  53.65 52.41 48.06 67.71  37.45
## x58 55.52 38.34  66.60 64.23 66.60 50.50  54.33
## x23 48.35 63.34  34.70 56.78 61.66 63.34  56.45
## x55 55.52 62.96  49.45 53.80 52.49 60.88  62.96
## x43 40.35 57.79  54.16 47.51 36.17 44.40  57.79
## x37 57.74 38.52  51.70 57.74 56.16 44.38  45.06
## x35 27.44 54.71  51.11 24.57 35.64 47.21  54.71
## x44 35.81 53.95  51.10 43.20 33.64 42.20  53.95
## x13 36.94 53.24  38.60 35.12 34.50 45.09  53.24
## x32 15.09 52.95  38.51 29.68 37.59 50.02  52.95
## x60 46.28 50.06  52.93 39.96 38.90 31.70  52.93
## x40 46.27 46.13  51.83 46.78 40.10 32.39  51.83
## x24 47.39 43.19  47.39 45.93 40.08 33.73  34.82
## x26 37.98 46.27  45.65 39.48 36.16 29.45  46.27

Последний график, показывает, что при увеличении количества итераций ошибка стремится к 0, т.е. модель склонна к переобучению. Ограничим число итераций по правилю “клюшки” 200 итерациями.

Проведем анализ полноты обучения для полученной нейросети RSNNS с параметрами:

  • maxit = 1500.
  • learnFunc = BackpropMomentum.
  • learnFuncParams = c(0.1, 0.03, 0.1, 0.001).
  • hiddenActFunc = Act_TanH.
  • size = 6.

Модель показывает неплохую точность на тестовой выборке, однако разброс довольно велик.

Нейросеть с 1 уровнем (nnet)

Можно применить нейросеть с предварительным отбором параметров на основе метода главных компонент (pcaNNet), но мы уже отобрали наиборлее информативные параметры, поэтому используем обычную одноуровневую нейросеть (nnet).

##     user   system  elapsed 
##  269.144    0.093 2957.652
## Neural Network 
## 
## 37502 samples
##    10 predictors
##     7 classes: '0', '1', '2', '3', '4', '5', '6' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 33752, 33753, 33751, 33752, 33752, 33752, ... 
## 
## Resampling results across tuning parameters:
## 
##   decay  size  Accuracy   Kappa      Accuracy SD  Kappa SD   
##   1e-04  6     0.7214289  0.6257242  0.008126005  0.011430226
##   1e-04  7     0.7260410  0.6319501  0.004398084  0.006034572
##   1e-04  8     0.7283087  0.6352470  0.007803647  0.010839226
##   1e-04  9     0.7306552  0.6385312  0.006433556  0.008937377
##   1e-03  6     0.7184691  0.6212101  0.008440729  0.011772356
##   1e-03  7     0.7238824  0.6290326  0.006673107  0.009448785
##   1e-03  8     0.7229494  0.6277636  0.008659524  0.012114001
##   1e-03  9     0.7243362  0.6296654  0.009401974  0.013237832
##   1e-02  6     0.6603938  0.5411264  0.030928077  0.041475136
##   1e-02  7     0.6643623  0.5468546  0.032530108  0.044460166
##   1e-02  8     0.6717545  0.5571847  0.039675777  0.054452527
##   1e-02  9     0.6813000  0.5701891  0.018383459  0.025561820
## 
## Accuracy was used to select the optimal model using  the largest value.
## The final values used for the model were size = 9 and decay = 1e-04.

Проведем анализ полноты обучения для полученной нейросети nnet с параметрами:

  • maxit = 1000,
  • size = 9,
  • decay = 10^{-4}.

Анализ качества обученных моделей

##                                 model  accuracy       variance
## 1               Decision Tree (rpart) 0.7362549        ?Низкий
## 2                       Random Forest 0.7419797 ?Очень высокий
## 3 LogitBoost Classification Algorithm 0.7782718         Низкий
## 4   Продвинутое дерево решений (C5.0) 0.7367379        Высокий
## 5               Neural network (nnet) 0.6825774         Низкий

Проверка лучшей модели на тестовой выборке

В качестве победившей по качеству предсказания на обучающих данных выбираем модель “Случайный лес (rf)”. Оценим качество ее предсказания на тестовой выборке, которую модель не “видела” при обучении.

## Confusion Matrix and Statistics
## 
##           Reference
## Prediction    0    1    2    3    4    5    6
##          0    0    0    0    0    0    0    0
##          1    1  131   48    9   12    2    0
##          2   15  121 3176  302  206  151   46
##          3   41  111  367 3068  245  153   81
##          4   21  101  234  195 1891  104   45
##          5   11   19  102   76  130  917   46
##          6    1    8   16   19   19   27  230
## 
## Overall Statistics
##                                           
##                Accuracy : 0.7532          
##                  95% CI : (0.7455, 0.7607)
##     No Information Rate : 0.3155          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.6703          
##  Mcnemar's Test P-Value : < 2.2e-16       
## 
## Statistics by Class:
## 
##                      Class: 0 Class: 1 Class: 2 Class: 3 Class: 4 Class: 5
## Sensitivity          0.000000  0.26680   0.8055   0.8362   0.7555  0.67725
## Specificity          1.000000  0.99400   0.9017   0.8870   0.9300  0.96554
## Pos Pred Value            NaN  0.64532   0.7906   0.7545   0.7298  0.70484
## Neg Pred Value       0.992799  0.97072   0.9096   0.9287   0.9382  0.96097
## Prevalence           0.007201  0.03929   0.3155   0.2936   0.2003  0.10834
## Detection Rate       0.000000  0.01048   0.2541   0.2455   0.1513  0.07337
## Detection Prevalence 0.000000  0.01624   0.3214   0.3253   0.2073  0.10410
## Balanced Accuracy    0.500000  0.63040   0.8536   0.8616   0.8427  0.82140
##                      Class: 6
## Sensitivity           0.51339
## Specificity           0.99253
## Pos Pred Value        0.71875
## Neg Pred Value        0.98210
## Prevalence            0.03585
## Detection Rate        0.01840
## Detection Prevalence  0.02560
## Balanced Accuracy     0.75296

Предсказние новых

Результаты публикации:

  • для модели Случайный лес (rf) точность оказалась 74.91%. Показатель невысокий, однако это первая публикация и она показала, что применяемый для выбора модели подход для оценки точности предстказания работает хорошо - в реальности точность оказалась даже чуть лучше, чем ожидалось.
  • для модели (LogitBoost) точность оказалась 70.81%. Низкая точность обусловлена спефикой модели (NA в предсказанных классах).